#-*- coding: UTF-8 -*-
from pyramid.httpexceptions import HTTPFound
from pyramid.security import remember
from pyramid.security import forget




from scp.modelo.models import DBSession
from scp.modelo.Atributo import Atributo
from scp.modelo.Tipo_Dato import Tipo_Dato

from pyramid.response import Response
from pyramid.view import view_config
import json

import re


def atributos(request):
	"""Método Controlador de Atributos, contrala las peticiones /atributos/{operacion}
		@param request: Petición Http del cliente. 	
	"""

	print ">>>>>>>>>>>>>Controlador de Atributos - Inicio>>>>>>>>>>>>>>"
	
	methodRequest = request.method
	print methodRequest
	
	print '>>>>>>>>>>>>>>request.url<<<<<<<<<<<<<<<<<<<<<<<<<<'
	
	print request.url
	
	
	print '>>>>>>>>>>>>>>>reles_url<<<<<<<<<<<<<<<<<<<'
	
	print '>>>>>>>>>>>>>>request_matchdict<<<<<<<<<<<<'
	
	dicParametros = request.matchdict
	
	print request.matchdict
	print '>>>>>>>>>>>>>>request_matchdict<<<<<<<<<<<<'
	
	
	print "operación"
	print dicParametros.get('operacion')
	print "operación"
	
	if dicParametros.get('operacion') == 'update' or dicParametros.get('operacion') == 'create':
		print 'entre el if de update'
		
		print 'json.loads(request.params[atributo])'
		atributo = json.loads(request.params['atributo'])
		print json.loads(request.params['atributo'])
		print 'atributo.data'
		atributoData = atributo.get('data')
		#print rol.get('data')
		print 'atributo.data.nombreAtributo'
		print atributoData.get('nombreAtributo')
		print 'json.loads(request.params[id_tipo_dato])'
		tipos_datos = json.loads(request.params['id_tipo_dato'])
		print tipos_datos
	
	print 'dicParametros.get(operacion).find(?):' 
	print dicParametros.get('operacion').find('?')
	
	
	session = DBSession()
	if dicParametros.get('operacion') == 'view' and request.url.find('?') == -1:
		print 'respondí un diccionario normal'
		return {'content':'Hello!'}	
	elif dicParametros.get('operacion') == 'view':
		atributosAll = session.query(Atributo).all()
		
		print '>>atributosAll'
		print atributosAll
		
		atributosArray = []
		for atributoIter in atributosAll:
			aux = {'idAtributo': atributoIter.id, 'nombreAtributo': atributoIter.nombre, 
					'datoAtributo':atributoIter.tipo_dato, 'observAtributo':atributoIter.observacion}
			atributosArray.append(aux)
		
		print '>>atributosAll'
		print atributosAll
			
		responseView = Response()
		#responseView.body = json.dumps(dict(success = True, roles = [{'idRol':'1', 'nombreRol': 'hola', 'descripRol':'mundo'}, {'idRol':'2', 'nombreRol': 'chau', 'descripRol':'mundo'}]))
		responseView.body = json.dumps(dict(success = True, atributos = atributosArray))
		responseView.content_type = 'application/json'
		print 'respondí con un Responseeeee!!!'
		return responseView
	elif dicParametros.get('operacion') == 'create':
		
		atributoAdd = Atributo()
		
		atributoAdd.nombre = atributoData.get('nombreAtributo')
		atributoAdd.observacion = atributoData.get('observAtributo')
		
		print 'id de atributo es este: '
		print request.params['id_tipo_dato']
		
		print 'EL nombre de ATRIBUTO es este: '
		print atributoAdd.nombre
		tipoDato = session.query(Tipo_Dato).filter_by(id=request.params['id_tipo_dato']).first()
		
		
		
		print 'tipoDato Dato es este: '
		#print tipoDato.dato
		
		atributoAdd.tipo_dato = tipoDato.nombre
		atributoAdd.tipo_dato_id = tipoDato.id
		print 'tipoDato TIENE NOMBRE es este: '
		print tipoDato.nombre
		print 'tipoDato SU ID es este: '
		print tipoDato.id
		session.add(atributoAdd)		
		responseCreate = Response()
		responseCreate.body = json.dumps(dict(success = True))
		responseCreate.content_type = 'application/json'
		return responseCreate
	elif dicParametros.get('operacion') == 'update':
		atributo = json.loads(request.params['atributo'])
		atributoData = atributo.get('data')
		
		atributosUpdate = session.query(Atributo).filter_by(id = atributoData.get('id')).one()
		
		#atributosUpdate = session.query(Atributo).filter_by(id=atributoData.get('id')).first()
		
		atributosUpdate.nombre = atributoData.get('nombre')
		#atributosUpdate.tipo_dato = atributoData.get('datoAtributo')
		atributosUpdate.observacion = atributoData.get('observacion')
		
		#idtipo_datoUpdate = json.loads(request.params['id_tipo_dato'])
		
		tipoDato = session.query(Tipo_Dato).filter_by(id=request.params['id_tipo_dato']).first()
		atributosUpdate.tipo_dato = tipoDato.nombre
		atributosUpdate.tipo_dato_id = tipoDato.id
		
		responseUpdate = Response()
		responseUpdate.body = json.dumps(dict(success = True))
		responseUpdate.content_type = 'application/json'
		return responseUpdate
		
		
	elif dicParametros.get('operacion') == 'destroy':
		print 'entre en el if de destroy'
		
		idAtributoEliminar = json.loads(request.params['param_idAtributo'])
		atributoEliminar = session.query(Atributo).filter_by(id=idAtributoEliminar).first()
		
		session.delete(atributoEliminar)
		
		responseDestroy = Response()
		responseDestroy.body = json.dumps(dict(success = True))
		responseDestroy.content_type = 'application/json'
		return responseDestroy
		
	
